</> 技術筆記Tech Notes

DXCore API: 位元陣列

一、概述

位元陣列 是一個基於位元級別的數據結構,專為管理和操作二進位數據而設計。它允許以靈活的方式記錄位元,並可以透過二進位字串或指定數量來進行初始化。此類別特別適用於需要儲存大量位元數據的場景,並內建了分頁管理機制以及高效的位元邏輯運算(AND, OR, NOT, XOR)功能。

初始化範例

您可以根據不同需求來建立 位元陣列 的實例。

  • 從二進位字串建立

  // 根據指定的二進位字串初始化
  const bitArray = new 位元陣列("10101");
  console.log(bitArray.數量); // 輸出: 5
  • 從數值建立 (指定位元數量)

  // 使用數值初始化,代表位元的總數量
  const bitArray = new 位元陣列(16);
  console.log(bitArray.數量); // 輸出: 16
  • 建立空的位元陣列

  // 初始化一個空的位元陣列
  const bitArray = new 位元陣列();
  console.log(bitArray.數量); // 輸出: 0

二、屬性

數量

取得當前位元陣列的總位元數量。此為唯讀屬性。

  • 型別: number

  • 描述: 回傳位元陣列所包含的總位元數。此數值由內部屬性 #數量 維護,主要用於了解陣列的大小。

  • 範例:

  const array = new 位元陣列(100);
  console.log(array.數量); // 輸出: 100
  
  const emptyArray = new 位元陣列();
  console.log(emptyArray.數量); // 輸出: 0

.頁面數量

取得當前位元陣列的總頁數。此為唯讀屬性。

  • 型別: number

  • 描述: 根據內部 #頁面 陣列的長度,回傳分頁的總數。

  • 範例:

  // 假設每頁可記錄 24 位元
  const bitArray = new 位元陣列(48);
  console.log(bitArray.頁面數量); // 輸出: 2

三、方法

constructor(初始值)

建立一個新的 位元陣列 實例。

  • 參數:

    • 初始值 (string | number | undefined): 用於初始化位元陣列的值。

      • 若為 string,視為二進位字串進行解析。

      • 若為 number,初始化對應數量的位元(全為 0)。

      • 若為 undefined 或其他型別,則初始化一個空的位元陣列。

  • 描述: 根據傳入的 初始值 類型來初始化位元陣列。

and(另一個陣列)

將當前位元陣列與另一個位元陣列進行 AND (且) 運算。

  • 參數:

    • 另一個陣列 (位元陣列): 用於 AND 運算的另一個位元陣列。

  • 回傳: 位元陣列 - 一個包含運算結果的新位元陣列。

  • 拋出錯誤: 參數錯誤 - 如果兩個位元陣列的位元數量不相同。

  • 範例:

  const array1 = new 位元陣列("1100");
  const array2 = new 位元陣列("1010");
  const result = array1.and(array2);
  console.log(result.轉為二進位字串()); // 輸出: "1000"

not()

對當前位元陣列的所有位元進行 NOT (反轉) 運算。

  • 回傳: 位元陣列 - 一個包含運算結果的新位元陣列。

  • 範例:

  const array = new 位元陣列("10110");
  const result = array.not();
  console.log(result.轉為二進位字串()); // 輸出: "01001"

or(另一個陣列)

將當前位元陣列與另一個位元陣列進行 OR (或) 運算。

  • 參數:

    • 另一個陣列 (位元陣列): 用於 OR 運算的另一個位元陣列。

  • 回傳: 位元陣列 - 一個包含運算結果的新位元陣列。

  • 拋出錯誤: 參數錯誤 - 如果兩個位元陣列的位元數量不相同。

  • 範例:

  const array1 = new 位元陣列("1100");
  const array2 = new 位元陣列("1010");
  const result = array1.or(array2);
  console.log(result.轉為二進位字串()); // 輸出: "1110"

xor(另一個陣列)

將當前位元陣列與另一個位元陣列進行 XOR (異或) 運算。

  • 參數:

    • 另一個陣列 (位元陣列): 用於 XOR 運算的另一個位元陣列。

  • 回傳: 位元陣列 - 一個包含運算結果的新位元陣列。

  • 拋出錯誤: 參數錯誤 - 如果兩個位元陣列的位元數量不相同。

  • 範例:

  const array1 = new 位元陣列("1100");
  const array2 = new 位元陣列("1010");
  const result = array1.xor(array2);
  console.log(result.轉為二進位字串()); // 輸出: "0110"

狀態(位元編號)

查詢指定索引位置的位元狀態 (是 1 還是 0)。

  • 參數:

    • 位元編號 (number): 要查詢的位元索引,必須大於等於 0 且小於總數量。

  • 回傳: boolean - 如果該位元為 1,回傳 true;否則回傳 false

  • 拋出錯誤:

    • 型別錯誤: 如果 位元編號 不是數字。

    • 索引超出範圍錯誤: 如果 位元編號 超出合法範圍。

  • 範例:

  const bitArray = new 位元陣列("1010");
  console.log(bitArray.狀態(0)); // 輸出: false
  console.log(bitArray.狀態(1)); // 輸出: true

複製()

複製當前的位元陣列,並回傳一個內容相同的新實例。

  • 回傳: 位元陣列 - 一個新的位元陣列實例。

  • 範例:

  const array1 = new 位元陣列("111");
  const array2 = array1.複製();
  array2.設定狀態(0, false);
  
  console.log(array1.轉為二進位字串()); // 輸出: "111"
  console.log(array2.轉為二進位字串()); // 輸出: "110"

解析二進位字串(二進位字串)

解析一段二進位字串,並更新當前位元陣列的內容。

  • 參數:

    • 二進位字串 (string): 只包含 01 的字串,可包含空白字元(會被自動忽略)。

  • 回傳: 位元陣列 - 回傳當前實例以支援鏈式調用。

  • 拋出錯誤: 二進位字串內容錯誤 - 如果字串中包含非 01 的字元。

  • 範例:

  const bitArray = new 位元陣列();
  bitArray.解析二進位字串("1010 1100");
  console.log(bitArray.轉為二進位字串()); // 輸出: "10101100"

設定全部狀態(狀態)

將所有位元的狀態統一設定為 true (1) 或 false (0)。

  • 參數:

    • 狀態 (boolean): true 表示將所有位元設為 1,false 表示設為 0。

  • 回傳: 位元陣列 - 回傳當前實例以支援鏈式調用。

  • 範例:

  const bitArray = new 位元陣列(8);
  bitArray.設定全部狀態(true);
  console.log(bitArray.轉為二進位字串()); // 輸出: "11111111"

設定狀態(位元編號, 狀態)

設定指定索引位置的位元狀態。

  • 參數:

    • 位元編號 (number): 要設定的位元索引。

    • 狀態 (boolean): true 表示設為 1,false 表示設為 0。

  • 回傳: 位元陣列 - 回傳當前實例以支援鏈式調用。

  • 拋出錯誤:

    • 型別錯誤: 如果 位元編號 不是數字。

    • 索引超出範圍錯誤: 如果 位元編號 超出合法範圍。

  • 範例:

  const bitArray = new 位元陣列(4); // 預設為 "0000"
  bitArray.設定狀態(1, true);
  console.log(bitArray.轉為二進位字串()); // 輸出: "0010"
  bitArray.設定狀態(3, true);
  console.log(bitArray.轉為二進位字串()); // 輸出: "1010"

轉為二進位字串()

將整個位元陣列轉換為 01 組成的字串表示。

  • 回傳: string - 代表位元陣列的二進位字串。

  • 範例:

  const bitArray = new 位元陣列(8).設定狀態(1, true).設定狀態(3, true);
  console.log(bitArray.轉為二進位字串()); // 輸出: "00001010"